package br.gov.sp.guarulhos.ui;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

import br.gov.sp.guarulhos.ui.util.ComponentesUtil;

public class AgendaUI extends JPanel {
	
	private JLabel labelLogin;
	private JTextField login;
	
	private JLabel labelSenha;
	private JTextField senha;
	
	private JButton acessar;
	
	
    public AgendaUI() {
        super(new GridLayout(1,0));

        //Keep references to the next few borders,
        //for use in titles and compound borders.
        Border blackline, raisedetched, loweredetched,
               raisedbevel, loweredbevel, empty;

        //A border that puts 10 extra pixels at the sides and
        //bottom of each pane.
        Border paneEdge = BorderFactory.createEmptyBorder(0,10,10,10);

        blackline = BorderFactory.createLineBorder(Color.black);
        raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
        loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
        raisedbevel = BorderFactory.createRaisedBevelBorder();
        loweredbevel = BorderFactory.createLoweredBevelBorder();
        empty = BorderFactory.createEmptyBorder();
        
        //First pane: simple borders
        JPanel loginPanel = new JPanel();
        loginPanel.setBorder(paneEdge);
        loginPanel.setLayout(new BoxLayout(loginPanel,
                                              BoxLayout.Y_AXIS));

        // Formulario de Login aqui!
        labelLogin = new JLabel();
        labelSenha = new JLabel();
        login = new JTextField();
        senha = new JTextField();
        acessar = new JButton();
        
        
        labelLogin.setHorizontalAlignment(SwingConstants.LEFT);
        labelLogin.setText("Login:");
        
        ComponentesUtil.addComponent(loginPanel, labelLogin, 50, 50, 100, 100);
        ComponentesUtil.addComponent(loginPanel, login, 50, 50, 100, 100);
        
        
        //Second pane: matte borders
        JPanel cadastroPanel = new JPanel();
        cadastroPanel.setBorder(paneEdge);
        cadastroPanel.setLayout(new BoxLayout(cadastroPanel,
                                              BoxLayout.Y_AXIS));

        // Formulario de Cadastro aqui!

        
        //Third pane: titled borders
        JPanel consultaPanel = new JPanel();
        consultaPanel.setBorder(paneEdge);
        consultaPanel.setLayout(new BoxLayout(consultaPanel,
                                              BoxLayout.Y_AXIS));
        TitledBorder titled;

        titled = BorderFactory.createTitledBorder(
                        loweredbevel, "Contatos");
        addCompForTitledBorder(titled,
                               "titled lowered bevel border"
                                   + " (default just., above top)",
                               TitledBorder.DEFAULT_JUSTIFICATION,
                               TitledBorder.ABOVE_TOP,
                               consultaPanel);

        //Fourth pane: compound borders
        JPanel sobrePanel = new JPanel();
        sobrePanel.setBorder(paneEdge);
        sobrePanel.setLayout(new BoxLayout(sobrePanel,
                                              BoxLayout.Y_AXIS));
        
        // Formulario Sobre aqui!
        
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Login", null, loginPanel, null);
        tabbedPane.addTab("Cadastro", null, cadastroPanel, null);
        tabbedPane.addTab("Consulta", null, consultaPanel, null);
        tabbedPane.addTab("Sobre", null, sobrePanel, null);
        tabbedPane.setSelectedIndex(0);
        String toolTip = new String("<html>Blue Wavy Line border art crew:<br>&nbsp;&nbsp;&nbsp;Bill Pauley<br>&nbsp;&nbsp;&nbsp;Cris St. Aubyn<br>&nbsp;&nbsp;&nbsp;Ben Wronsky<br>&nbsp;&nbsp;&nbsp;Nathan Walrath<br>&nbsp;&nbsp;&nbsp;Tommy Adams, special consultant</html>");
        tabbedPane.setToolTipTextAt(1, toolTip);

        add(tabbedPane);
    }

    void addCompForTitledBorder(TitledBorder border,
                                String description,
                                int justification,
                                int position,
                                Container container) {
        border.setTitleJustification(justification);
        border.setTitlePosition(position);
        addCompForBorder(border, description,
                         container);
    }

    void addCompForBorder(Border border,
                          String description,
                          Container container) {
        JPanel comp = new JPanel(new GridLayout(1, 1), false);
        JLabel label = new JLabel(description, JLabel.CENTER);
        comp.add(label);
        comp.setBorder(border);

        container.add(Box.createRigidArea(new Dimension(0, 10)));
        container.add(comp);
    }


    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path,
                                               String description) {
        java.net.URL imgURL = BorderDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL, description);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the 
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Agenda Swing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        AgendaUI newContentPane = new AgendaUI();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

